home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / PET / S-Super PET / (s)tl.d64 / SCRNDMP.ASM < prev    next >
Assembly Source File  |  2009-01-18  |  4KB  |  147 lines

  1. opt     nolist
  2. ;       Screen Dump Routines as of 03/24/84
  3. ;       by T.M. Peterson (with help from his friends)
  4.  
  5.         xref    TGetCurs_,Openf_,Closef_,FPutRec_,FPutNL_
  6.         xref    FPutChar_,Scroll_Stop
  7.         xref    ScrnDmpType
  8.  
  9.         xdef    Dump_to_ieee4,Dump_to_disk,NMI_jump
  10.  
  11. ; Following code is assumed to be in bank-switched memory
  12. ; and therefore needs no protection from over-writing by
  13. ; user programs.
  14.  
  15. NMI_jump        equ     *       ;Come here on shift-RVS
  16.         bsr     tstSTOP         ;Is STOP down too?
  17.         if      ne      ;Yes
  18.           clr   Scroll_Stop
  19.           leas  4,s     ;Dump RTS addrs.
  20.           jmp   [$10C]  ;Treat like NMI
  21.         else
  22.           com   Scroll_Stop     ;No, just toggle flag
  23.         endif
  24.         rts             ;ignore
  25.  
  26. ;       Test for STOP key: row 9, bit 4
  27. ;       CC(Z)=1 if not stop
  28.  
  29. tstSTOP ldd #$910
  30.  
  31. tstIT   pshs b
  32.         sei
  33.         STA  $e810      ;sel. row
  34.         andb $e812      ;mask bit(s)
  35.         cli
  36.         cmpb ,s         ;all set?
  37.         leas 1,s        ;clr stk
  38.         RTS             ;Z=1 means bit(s) set (i.e., ky NOT dn)
  39.  
  40. tstStopFlg      equ     *
  41.         tst     Scroll_Stop     ;Was shift-RVS pressed?
  42.         if      eq              ;no
  43.           leas  2,s             ;dump rts & quit
  44.         endif
  45.         clr     Scroll_Stop     ;Clr it now
  46.         rts
  47.  
  48. wrtype  fcb 'W',0
  49.  
  50. prname0 fcc "ieee4"     ;Select if ScrnDmpType = $X0
  51.         fcb 0
  52. prname1 fcc "printer"   ;  "    if      "      = $X1
  53.         fcb 0
  54. prname2 fcc "serial"    ;(You guessed it!)
  55.         fcb 0
  56.  
  57. aptype  fcb 'A',0
  58. dskname fcc "disk8/0.Screen_Dump"
  59.         fcb 0
  60.  
  61. Dump_to_ieee4   equ     *
  62.  
  63.         bsr tstStopFlg  ;in shift-RVS 'mode'? (no ret. if so)
  64.         guess
  65.           ldb ScrnDmpType ;Is printer 'ieee4'?
  66.           andb #3         ;Only l.s. 2 bits matter
  67.         quif ne           ;not ieee
  68.           ldd #prname0  ;Set filename pointer
  69.         admit
  70.           decb          ;Is 'printer'?
  71.         quif ne         ;wrong again
  72.           ldd #prname1
  73.         admit
  74.           ldd #prname2  ;must be 'serial'
  75.         endguess
  76.         ldx #wrtype
  77.         bsr opn1        ;open file
  78.         bne prnt        ;success
  79.         rts
  80.  
  81. Dump_to_disk    equ     *
  82.  
  83.         bsr tstStopFlg
  84.         ldb ScrnDmpType ;Save printer flags
  85.         pshs b
  86.         clr ScrnDmpType ;(No LFs NOW)
  87.         ldx #aptype     ;Try to append
  88.         bsr dopn
  89.         if  eq          ;oops, failed.
  90.           ldx #wrtype   ; OK, try to create file
  91.           bsr dopn
  92.         endif
  93.         if  ne          ;success
  94.           bsr prnt
  95.         endif
  96.         puls b
  97.         stb  ScrnDmpType
  98.         rts
  99.  
  100. dopn  ldd #dskname      ;Disk filename
  101. opn1  pshs x
  102.       JSR  Openf_       ;go open it
  103.       LEAS 2,S
  104.       RTS
  105.  
  106. prnt  LEAS -4,S         ;res some stack space
  107.       STD  $02,S        ;save cntrl blk
  108.       JSR  FPutNL_
  109.       LDX  #$8000       ;start at CRT beg.
  110.  
  111. prnt1 STX  ,S           ;save pntr
  112.       LDB  #79          ;max 80 chars/line
  113.       LDA  #$20         ;space
  114.     loop
  115.       CMPA B,X          ;look for eol
  116.       quif ne           ;here it is
  117.       DECB              ;to beg. of line?
  118.     until  mi
  119.       CLRA
  120.       INCB              ;adj. count
  121.       PSHS d
  122.       PSHS x
  123.       LDD  $06,S        ;get cntrl blk ptr
  124.       JSR  FPutRec_     ;print#P1, (P2).(P3)
  125.       tst  ScrnDmpType  ;Req. LF?
  126.       if   mi           ;yes
  127.         ldb #10
  128.         std  ,s
  129.         ldd  6,s        ;get fcb
  130.         jsr  FPutChar_  ;send LF
  131.       endif
  132.       LEAS 4,S          ;clean stack
  133.       lbsr tstSTOP      ;test for STOP
  134.       bne  prnt2
  135.       LDX  ,S           ;get pntr back
  136.       LEAX 80,X         ;bump to nxt line
  137.       tfr  x,d          ;make copy
  138.       anda #$7f         ;strip CRT offset
  139.       cmpd $122         ;back to crsr?
  140.       blo  prnt1        ;no, loop
  141.  
  142. prnt2 LDD  $02,S        ;close file
  143.       JSR  Closef_
  144.       LEAS 4,S          ;release stk space
  145.       RTS
  146.       end
  147.